import java.util.HashMap;

class Solution {
    public static void main(String[] args) {
        String s =
                "ADOBECODEBANC";
        String  t =
                "ABC";
        System.out.println(minWindow(s, t));
    }
    public static String minWindow(String s, String t) {
       char[] sNums = s.toCharArray() ;
       char[] tNums = t.toCharArray() ;
        HashMap<Character,Integer> map = new HashMap<>() ;
        for(char ch : tNums){
            map.put(ch , map.getOrDefault(ch,0)+1);
        } 
        int count = 0 ;
        int target = Integer.MAX_VALUE ;
        int index = -1 ;
        HashMap<Character,Integer> sum = new HashMap<>() ;
        for(int i=0,j=0 ; j < sNums.length ; j ++){
            char tmp = sNums[j];
            if(sum.getOrDefault(tmp , 0) < map.getOrDefault(tmp,0)){
                count ++ ;
            } sum.put(tmp,sum.getOrDefault(tmp,0)+1);
            while(sum.getOrDefault(tmp,0) > map.getOrDefault(tmp,0)){
               char ch = sNums[i];
               if(sum.getOrDefault(ch,0) <= map.getOrDefault(ch,0)){
                  count -- ;
               }
               sum.put(ch , sum.getOrDefault(ch,0)-1);
               i ++ ;
            }
            if(count == tNums.length){
                int len = j-i+1 ;
                if(target > len){
                    target = len;
                    index = i ;
                }
            }
        }
        if(index == -1){
            return "";
        }

        return new String(sNums,index,target) ;
    }
}